import os
import signal
import subprocess
import time
import allure
import paramiko
import pytest

from config import BASE_PATH


def pytest_addoption(parser):
    '''增加命令行参数 --username'''
    parser.addoption(
        "--username1",
        action="store",
        # default: 默认值，命令行没有指定host时，默认用该参数值
        default="11100009001",
        help="用户名"

    )

    parser.addoption('--task_username', default='11100009001', help='每日任务账号，要求未完成任何任务')
    parser.addoption('--jiamingceshi_username', default='11100009001', help='假名测试账号，没有特殊需求')
    parser.addoption('--setting_username', default='11100009001', help='设置功能账号，最好没更改过设置信息,需要手机预先保存一张图片'
                     )
    parser.addoption('--new_user_name', default='测试号4823', help='设置中要修改的用户名,和上面设置的用户名一致'
                     )
    parser.addoption('--study_manage_username', default='11100009001', help='学习管理账号，最好学习管理中没有添加任何课程和收藏'
                     )
    parser.addoption('--shop_username', default='11100009001', help='商城账号，无要求')
    parser.addoption('--wd_other_username', default='11100009001', help='分享app更新题库账号，无任何要求')
    parser.addoption('--discovery_username', default='11100009001', help='发现页登录账号，无特殊要求')
    parser.addoption('--glsx_list_username', default='11100009001', help='跟老师学列表账号，要求未领过课')
    parser.addoption('--glsx_list_username_auto', default='11100009001', help='跟老师学列表动态账号号段，要求未领过课，少一位'
                     )
    parser.addoption('--glsx_ad_username_auto', default='11100009001', help='跟老师学广告位动态账号号段，要求未领过课，少一位'
                     )
    parser.addoption('--wsy_ad_username_auto', default='11100009001', help='五十音动态账号号段，要求未领过课，少一位'
                     )
    parser.addoption('--skip_cidao_statue', default=False, help='评审开关')
    parser.addoption('--skip_wsy_debug', default=False, help='测试站跳过开关')
    parser.addoption('--skip_wsy_online', default=False, help='正式站跳过开关')
    parser.addoption('--run_host', default='http://127.0.0.1:4723/wd/hub', help='运行程序的默认地址')


@pytest.fixture(scope="class", autouse=True)  # autouse=True自动执行该前置操作
def username(request):
    '''获取命令行参数，给到环境变量'''
    # os.environ["username1"] = request.config.getoption("--username1")
    os.environ["task_username"] = request.config.getoption("--task_username")
    os.environ["jiamingceshi_username"] = request.config.getoption("--jiamingceshi_username")
    os.environ["setting_username"] = request.config.getoption("--setting_username")
    os.environ["new_user_name"] = request.config.getoption("--new_user_name")
    os.environ["study_manage_username"] = request.config.getoption("--study_manage_username")
    os.environ["shop_username"] = request.config.getoption("--shop_username")
    os.environ["wd_other_username"] = request.config.getoption("--wd_other_username")
    os.environ["discovery_username"] = request.config.getoption("--discovery_username")
    os.environ["glsx_list_username"] = request.config.getoption("--glsx_list_username")
    os.environ["glsx_list_username_auto"] = request.config.getoption("--glsx_list_username_auto")
    os.environ["glsx_ad_username_auto"] = request.config.getoption("--glsx_ad_username_auto")
    os.environ["wsy_ad_username_auto"] = request.config.getoption("--wsy_ad_username_auto")
    os.environ["skip_cidao_statue"] = request.config.getoption("--skip_cidao_statue")
    os.environ["skip_wsy_debug"] = request.config.getoption("--skip_wsy_debug")
    os.environ["skip_wsy_online"] = request.config.getoption("--skip_wsy_online")
    os.environ["run_host"] = request.config.getoption("--run_host")
    # print("当前用例运行测试环境:%s" % os.environ["host"])


# 执行命令
# pytest --task_username=$task_username --jiamingceshi_username=$jiamingceshi_username --setting_username=$setting_username --new_user_name=$new_user_name --study_manage_username=$study_manage_username --shop_username=$shop_username --wd_other_username=$wd_other_username --discovery_username=$discovery_username --glsx_list_username=$glsx_list_username --glsx_list_username_auto=$glsx_list_username_auto --glsx_ad_username_auto=$glsx_ad_username_auto --wsy_ad_username_auto=$wsy_ad_username_auto --skip_cidao_statue=$skip_cidao_statue --skip_wsy_online=$skip_wsy_online --skip_wsy_debug=$skip_wsy_debug


# 录屏代码
@pytest.fixture()
def record_screen(request):
    module_name = request.param
    print(module_name, "传入参数")
    if os.environ['RUN_HOST'] == "http://127.0.0.1:4723/wd/hub":
        # global ssh
        path = BASE_PATH + os.sep + 'video' + os.sep + module_name + '-{}.mp4' \
            .format(time.strftime("%Y_%"
                                  "m_%d-%H_%M_%S"))
        list1 = path.split('\\')
        list1.reverse()
        filename = list1[0]
        cmd = "scrcpy -r " + path
        print(cmd)
        p = subprocess.Popen(cmd, shell=True)
        yield module_name
        time.sleep(2)
        # 关闭命令录屏
        # os.kill(p.pid, signal.CTRL_C_EVENT)
        os.system('taskkill /IM scrcpy.exe')
        # allure.attach.file(path, name=filename, attachment_type=allure.attachment_type.MP4)
        # time.sleep(5)
        with open(path, 'rb') as f:
            allure.attach(f.read(), f'录屏文件，文件名:{filename}', allure.attachment_type.MP4)
            time.sleep(2)
    # else:
    #     module_name = request.param
    #     print(module_name, "传入参数")
    #     yield module_name
    #     pass

    else:
        ip = os.environ['RUN_HOST'].split('/')[2].split(':')[0]
        ssh = paramiko.SSHClient()
        # 允许连接不在know_hosts文件中的主机
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        # 连接服务器(本地ssh服务)
        ssh.connect(hostname=ip, port=2233, username='test', password='123456')
        channel = ssh.invoke_shell()
        # 执行命令
        path = r"D:\pytest_video" + os.sep + module_name + '-{}.mp4' \
            .format(time.strftime("%Y_%"
                                  "m_%d-%H_%M_%S"))
        list2 = path.split('\\')
        list2.reverse()
        filename = list2[0]
        cmd = "scrcpy -r " + path + '\n'
        print(cmd)
        # ssh.exec_command(cmd)
        channel.send(cmd)
        yield module_name

        time.sleep(2)
        stdin1, stdout1, stderr1 = ssh.exec_command('taskkill /IM scrcpy.exe')
        # 获取命令结果
        result = stdout1.read().decode('gbk')
        print(result)
        time.sleep(2)
        # 传输文件到服务器本地
        stdin2, stdout2, stderr2 = ssh.exec_command(r'net use \\192.168.1.28\ipc$ "123456" /user:zaodao')
        result = stdout2.read().decode('gbk')
        print(result)
        stdin3, stdout3, stderr3 = ssh.exec_command(f'xcopy {path} \\\\192.168.1.28\shared /Y')
        result = stdout3.read().decode('gbk')
        print(result)
        time.sleep(10)
        stdin4, stdout4, stderr4 = ssh.exec_command(r'net use \\192.168.1.28\ipc$ /delete')
        result = stdout4.read().decode('gbk')
        print(result)

        path_server = r'C:\Users\zaodao\Desktop\shared' + os.sep + filename
        with open(path_server, 'rb') as f:
            allure.attach(f.read(), f'录屏文件，文件名:{filename}', allure.attachment_type.MP4)
        time.sleep(2)


if __name__ == '__main__':
    path = r"D:\pytest_temp" + os.sep + 'module_name' + '-{}.mp4' \
        .format(time.strftime("%Y_%"
                              "m_%d-%H_%M_%S"))
    print(path)
